package com.hnkywl.jip.utils;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;

import java.io.File;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * 说明：
 * 包:        com.hnkywl.jip.utils
 * 类描述:    [一句话描述该类的功能]
 * 创建人:    ZHUCHG
 * 创建时间: 13-2-21 下午11:17
 * 修改人:    ZHUCHG
 * 修改时间: 13-2-21 下午11:17
 * 修改备注: [说明本次修改内容]
 * 版本:        [v1.0]
 */
public class Freemarker2Xml {
    /**
     * @param root
     * @return
     * @throws Exception
     */
    public static String generateVoucherXml(Map root) throws Exception {
        return generateXml(root, "generate_vouther.ftl");
    }

    /**
     * @param root
     * @return
     * @throws Exception
     */
    public static String revokeVoucherXml(Map root) throws Exception {
        return generateXml(root, "revoke_voucher.ftl");
    }

    /**
     * @param root
     * @return
     * @throws Exception
     */
    public static String generateXml(Map root, String templateFileName) throws Exception {
        /* 一般在应用的整个生命周期中你仅需要执行一下代码一次*/
        /* 创建一个合适的configuration */
        Configuration cfg = new Configuration();
        cfg.setEncoding(Locale.getDefault(), "UTF-8");
        String path = Freemarker2Xml.class.getResource("").getPath() + "/templates";
        cfg.setDirectoryForTemplateLoading(new File(path));
        cfg.setObjectWrapper(new DefaultObjectWrapper());
        /* 而以下代码你通常会在一个应用生命周期中执行多次*/
        /*获取或创建一个模版*/
        Template temp = cfg.getTemplate(templateFileName);
        temp.setEncoding("UTF-8");
        /*创建一个数据模型Create a data model */
        if (root == null)
            root = new HashMap();
        /* 合并数据模型和模版*/
        StringWriter out = new StringWriter();
        temp.process(root, out);
        return out.getBuffer().toString();
    }
}
